﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QldtSdh.DAL.Models;
using QldtSdh.GUI.DuLieu;

namespace QldtSdh.BLL
{
    public partial class BizLopHocPhan
    {
        /// <summary>
        /// Lấy danh sách lớp học phần theo học kỳ và đơn vị
        /// </summary>
        /// <returns></returns>
        public static List<LopHocPhan> GetList(string maHocKy)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var ls = db.LopHocPhanDbSet.Where(e => e.MaHocKyGUID == maHocKy).OrderBy(e => e.TenLopHocPhan).ToList();
                if (ls != null && ls.Count > 0)
                {
                    foreach (var item in ls)
                    {
                        int soHocVienConNo = 0;
                        if (item.LopHocPhan_HocVien != null && item.LopHocPhan_HocVien.Count > 0)
                        {
                            foreach (var hocVien in item.LopHocPhan_HocVien)
                            {
                                var ketQuaHocTap = db.HocVien_KetQuaHocTapDbSet.Where(e => e.MaHocVien == hocVien.MaHocVien && e.MaHocPhanGUID == item.MaHocPhanGUID).FirstOrDefault();
                                if (ketQuaHocTap != null)
                                {
                                    if (ketQuaHocTap.DiemHe10 < 5)
                                        soHocVienConNo++;
                                }
                                else
                                    soHocVienConNo++;
                            }
                        }
                        item.SoHocVienConNo = soHocVienConNo;
                    }
                    return ls;
                }
                else return null;
            }
        }

        /// <summary>
        /// Lấy danh sách lớp học phần trong 1 một học kỳ thuộc 1 đơn vị nào đó
        /// </summary>
        /// <param name="maHocKy"></param>
        /// <param name="maDonViPhuTrach"></param>
        /// <returns></returns>
        internal static List<LopHocPhan> GetList(string maHocKy, string maDonViPhuTrach)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.LopHocPhanDbSet.Where(e => e.MaHocKyGUID == maHocKy && e.HocPhan.MaDonViPhuTrachGUID == maDonViPhuTrach).ToList();
            }
        }

        public static LopHocPhan GetByID(string idLopHocPhan)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.LopHocPhanDbSet.Where(e => e.MaLopHocPhanGUID == idLopHocPhan).FirstOrDefault();
            }
        }

        public static CODE_RESULT_RETURN UpdateBangDiem(string idLopHocPhan, TRANGTHAI_BANGDIEM trangThaiBangDiem, string idNguoiNhapHayKiemTra)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var lhp = db.LopHocPhanDbSet.Where(e => e.MaLopHocPhanGUID == idLopHocPhan).FirstOrDefault();
                var nhatKy = new NhatKyHoatDong();
                BizNhatKyHoatDong.InitData<LopHocPhan>(nhatKy, lhp, lhp.MaLopHocPhanGUID, LOAIDOITUONG.LỚP_HỌC_PHẦN, LOAITHAOTAC.Chỉnh_sửa);
                if (lhp != null)
                {
                    lhp.TrangThaiBangDiemQTHT = (int)trangThaiBangDiem;
                    if (trangThaiBangDiem == TRANGTHAI_BANGDIEM.DANHAPXONG)
                    {
                        lhp.MaNguoiNhapBangDiemQTHT = idNguoiNhapHayKiemTra;
                        lhp.NgayNhapBangDiemQTHT = DateTime.Now;
                    }
                    else if (trangThaiBangDiem == TRANGTHAI_BANGDIEM.BAOLOINHAP || trangThaiBangDiem == TRANGTHAI_BANGDIEM.DAPHEDUYET)
                    {
                        lhp.MaNguoiDuyetBangDiemQTHT = idNguoiNhapHayKiemTra;
                        lhp.NgayDuyetBangDiemQTHT = DateTime.Now;
                    }
                    db.SaveChanges();
                    BizNhatKyHoatDong.Add<LopHocPhan>(nhatKy, lhp);
                    return CODE_RESULT_RETURN.ThanhCong;
                }
                else
                    return CODE_RESULT_RETURN.ThatBai;
            }
        }
    }
}
